/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cmti.skeleton.service;

import com.cmti.skeleton.dto.SysDeptDto;
import com.cmti.skeleton.dto.TreeNode;
import com.cmti.skeleton.dto.TreeNodeLayui;
import com.cmti.skeleton.entity.SysDept;
import java.util.List;

/**
 *
 * @author Worker
 */
public interface DeptService {

    /**
     * 获取顶级部门
     *
     * @param sysDeptDto
     * @return 成功则返回list集合，失败返回空集合
     *
     */
    List<SysDeptDto> getDepartmentList(SysDeptDto sysDeptDto);

    /**
     * 增加部门
     *
     * @param sysDept
     * @return ifAdd 成功返回新增的实体的id，失败返回-1
     */
    public long addDept(SysDept sysDept);

    /**
     * 修改部门
     *
     * @Param sysDept
     * @return ifUpdate 成功返回true,失败返回false
     */
    public boolean updateDept(SysDept sysDept);

    /**
     * 删除部门 以及其子部门
     *
     * @param deptId
     * @return ifDel 返回影响的行数
     */
    public long delDept(long deptId);

    /**
     * 获取树形结构的部门列表
     *
     * @return
     */
    List<TreeNode> getDeptTree();

    /**
     * 验证该部门下有没有关联的员工
     *
     * @param deptId
     * @return true 如果有关联员工; false 如果没有
     */
    boolean hasAssociatedUsers(long deptId);

    /**
     * 验证该部门下是否有子部门
     *
     * @param deptId
     * @return true 如果有子部门; false 如果没有
     */
    boolean hasSubDepartments(long deptId);

    /**
     * 获取树形的部门列表
     *
     * @return
     */
    List<TreeNodeLayui> getDeptTreeList();

    /**
     * 查询所有的部门包含其父部门
     *
     * @return
     */
    List<SysDeptDto> getListWithParentName();

    /**
     * 根据部门ID获取部门信息
     *
     * @param deptId
     * @return
     */
    SysDept getDeptById(long deptId);
}
